package spring.cloud.tasks.common;

import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

@Setter
@Getter
public class TaskStageInfo {

    /**
     * 允许重新创建实例信息。
     * <p>
     * 现阶段的分片任务大致可以抽象成3个步骤：
     * 总。获取数据，可以从上传的文件解析数据、从 DB 查询出大批数据或其他数据源。
     * 分。处理数据，聚焦于具体业务，如：创建、查询、更新。
     * 总。处理结果，将此次任务运行结果处理成结果报告返回给用户，报告可以为 Excel、一条消息、一封邮件等
     * <p>
     * PreProcess[PD](总)：数据准备阶段。可在此方法中对数据进行额外处理，如计算拓扑关系，定义数据优先级。单机运行。
     * ShardingProcess[PP](分)：分片处理阶段。实际处理函数，多机运行。分片处理函数，执行批量导入、更新等处理。（入参：Scheduler 对 PreProcess 返回结果的分片子参数）
     * Notify[SR](阶段式-总)：进度更新处理，每当进度变更的大小大于设定阈值，则生成一次 Notify 的Task。Executor 向 Scheduler 汇报子任务进度，Scheduler 计算出总体进度，当总进度发生变更后生成 NotifyTask 通知 Executor 进行处理。
     * PostProcess[RP](总)：结果处理阶段。任务执行完毕后可在此函数进行后续处理，单机运行。当所有分片子任务都执行完后，Scheduler 会将子任务的执行结果发送到此函数处理。（入参：每一个子任务 ShardingProcess 后的结果数组）
     */
    /**
     * 批次任务N大阶段
     * 捞取数据-划分小批次阶段 GD-PB
     * 小批次数据处理 SBH
     * 任务状态后置处理 SPH
     */
    public String stage;
    public String stageDesc = "";//建议设置
    public int stageNum;//该值从1-N，在实例的阶段都是数字,根据stageNum和stage进行互相换算
    //
    public List<TaskItemInfo> taskItemInfoList = new ArrayList<>();

    @Setter
    @Getter
    public static class TaskItemInfo {
        public String taskItemType;
        public String taskItemDesc = "";//建议设置
        public int taskItemCount;
        public int taskItemLoad;
    }
}
